%sin pauses
\documentclass[handout]{beamer}
%con pauses
%\documentclass{beamer}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[spanish]{babel}
\usepackage{graphicx}

\usetheme{Madrid}

\author{Benito Vitale, Dardo Marasca}
\title{Object Oriented Virtual Memory}

\begin{document}

\begin{frame}
	\titlepage
\end{frame}

\begin{frame}
  \frametitle{Motivación}	
   
  \begin{block}{Motivación}
    Llegar a la utopía de los objetos.
  \end{block}
  \pause

  \begin{block}{}
    Capacidad de crear objetos sin preocuparme sobre de disco, de archivos, de memoria, etc. 
  \end{block}			
  \pause
  
  \begin{block}{}
    Limpiar todas las impurezas relacionadas a la arquitectura.
  \end{block}			
  \pause
  
  \begin{block}{}
    Trabajar en un "Mundo infinito".
  \end{block}
  \pause

  \begin{block}{Problemas}
    Limitaciones de la arquitectura.
  \end{block}						

\end{frame}

\begin{frame}
  \frametitle{SqueakNOS}	

  \begin{block}{Que es?}
    Es una modificación de la VM de Squeak que nos permite correr una imagen sin necesidad de contar con un sistema operativo de base.
  \end{block}
  \pause

  Características: 

  \begin{itemize}
    \pause \item No necesita un sistema operativo base.
    \pause \item Todos los dispositivos de la PC están reificados en objetos dentro de la imagen.
    \pause \item Todas las funcionalidades que normalmente nos ofrece un sistema operativo están implementadas con objetos.
    \pause \item Drivers programados en Smalltalk.
    \pause \item Sistema de paginación muy básico (identity mapping).
  \end{itemize}

\end{frame}


\begin{frame}
  \frametitle{Memoria virtual}	

  \begin{block}{Qué es?}
    Virtual Memory es una técnica de administración de memoria utilizada por los sistemas operativos modernos.
  \end{block}
  \pause
  
  \begin{block}{Idea general}
    Evitar que los objetos accedan directamente a la memoria física.
  \end{block}
  \pause

  \begin{block}{}
    Los procesos acceden a un espacio de memoria ``virtual'', las direcciones de memoria virtual se mapean a direcciones de memoria física.
  \end{block}
  \pause

  \begin{block}{}
    Por lo tanto desconocen completamente en que lugar de la memoria física están los datos.
  \end{block}


\end{frame}

\begin{frame}
  \frametitle{Memoria Virtual} 
  \begin{center}
    \includegraphics[width=250pt]{./img/virtualMemory.png}
  \end{center}
\end{frame}

\begin{frame}
  \frametitle{Memoria Virtual}
  \framesubtitle{Políticas de desalojo}
  Políticas de desalojo:
  \begin{itemize}
  \pause \item Random.
  \pause \item Fifo.
  \pause \item Not recently used (NRU).
  \pause \item Least recently used (LRU).
  \pause \item Clock.
  \end{itemize}
  
  \pause

  \begin{block}{Cuál usar?}
    Utilizar una u otra estrategia implica un ``tradeoff'' entre minimizar la necesidad de acceder a disco y minimizar el overhead creado al utilizar la estrategia.
  \end{block}
  
\end{frame}

\begin{frame}
  \frametitle{Memoria Virtual} 
  \framesubtitle{Implementación en x86}
   \begin{center}
    \includegraphics[width=275pt]{./img/paging.png}
  \end{center}
\end{frame}

\begin{frame}
  \frametitle{Memoria Virtual} 
  \framesubtitle{Implementación en x86}
   \begin{center}
    \includegraphics[width=175pt]{./img/page_table_entry.png}
  \end{center}
\end{frame}

\begin{frame}
  \frametitle{Objetivo} 
  \begin{block}{SqueakNOS}
    No posee ningún sistema de paginación virtual.
  \end{block}
  \pause
  \begin{block}{}
    Nuestro mundo esta limitado por la cantidad de memoria RAM disponible.
  \end{block}
  \pause
  
  \begin{block}{Objetivo}
    Implementar un sistema de paginación virtual en SqueakNOS.
  \end{block}
  
\end{frame}

\begin{frame}
  \frametitle{Bootstraping} 
  \begin{block}{SqueakNOS}
    SqueakNOS utiliza GRUB como bootloader.
  \end{block}
  \pause
  Inicio en SqueakNOS:
  \begin{itemize}
    \pause \item Pasar a modo protegido.
    \pause \item Inicializar el modo de vídeo.
    \pause \item Cargar la VM a memoria.
    \pause \item Cargar la imagen a memoria.
  \end{itemize}
  \pause
  
  \begin{block}{Problema}
    La imagen podría no entrar en memoria.
  \end{block}
  
\end{frame}

\begin{frame}
  \frametitle{Bootstraping} 
  \framesubtitle{Soluciones}
  \begin{center}
    \includegraphics[width=200pt]{./img/dudas.jpg}
  \end{center}
\end{frame}

\begin{frame}
  \frametitle{Bootstraping} 
  \framesubtitle{Carga con una imagen dedicada}
  
  \begin{block}{Idea}
    Una imagen pequeña que se carge en memoria primero y luego cargue la imagen principal.
  \end{block}
  \pause
  
  Ventajas:
  \begin{itemize}
    \pause \item No es necesario cambiar el bootloader.
    \pause \item Se puede utilizar la implementación de Fat32 en Smalltalk para acceder a la imagen en disco.
  \end{itemize}
  Desventajas:
  \begin{itemize}
    \pause \item Definir que parte de la imagen necesito cargar.
    \pause \item Modificar la VM para que pueda transferirle el control a la imagen principal.
  \end{itemize}
  
\end{frame}

\begin{frame}
  \frametitle{Bootstraping} 
  \framesubtitle{Carga desde la VM}
  
  \begin{block}{Idea}
    Modificar la VM para que esta sea capaz de cargar la imagen sin necesidad del bootloader.
  \end{block}
  
  \pause
  
  Ventajas:
  \begin{itemize}
    \pause \item Una sola imagen.
  \end{itemize}
  Desventajas:
  \begin{itemize}
    \pause \item Definir que parte de la imagen necesito cargar.
    \pause \item Modificar la VM para que pueda cargar la imagen.
    \pause \item Implementar el acceso a disco y al sistema de archivos.
    \pause \item Programar en C.
  \end{itemize}
  
\end{frame}

\begin{frame}
  \frametitle{Garbage Collector} 
  \begin{block}{Restriccion}
    Cuando corre el GC, mi entorno Smalltalk se pausa, por lo tanto no puedo ejecutar nada de código que se encuentre allí.
  \end{block}
  \pause
  
  \begin{block}{Además}
    Nuestro sistema que implementa paginación virtual esta en Smalltalk.
  \end{block}
  \pause
  
  Entonces si el GC intenta acceder a una pagina que no esta en memoria...
  \pause
  \begin{center}
    \includegraphics[width=140pt]{./img/boom.jpg}
  \end{center}
  
\end{frame}

\begin{frame}
  \frametitle{Garbage Collector} 
  \framesubtitle{Soluciones}
  \begin{center}
    \includegraphics[width=200pt]{./img/dudas.jpg}
  \end{center}
\end{frame}


\begin{frame}
  \frametitle{Garbage Collector} 
  \framesubtitle{Paginación en la VM}
  \begin{block}{Idea}
    Implementar paginación virtual en la VM.
  \end{block}
  \pause
  Ventajas:
  \pause
  \begin{itemize}
    \pause \item Los fallos de pagina pueden resolverse a pesar de ser generados en el GC.
  \end{itemize}
  Desventajas:
   \pause
  \begin{itemize}
    \pause \item Hay que modificar la VM.
    \pause \item Hay que programar en C.
    \pause \item Hay que programar en C (no hay error de tipeo).
    \pause \item Hay que implementar los drivers del disco y el sistema de archivos.
  \end{itemize}
  
\end{frame}

\begin{frame}
  \frametitle{Garbage Collector} 
  \framesubtitle{Ignorar paginas en disco}
  \begin{block}{Idea}
    El GC debe ignorar a los objetos que se encuentran en paginas que no están en memoria.
  \end{block}
  \pause
  Ventajas:
  \pause
  \begin{itemize}
    \pause \item No va a ser necesario cargar paginas en disco durante el GC.
    \pause \item Mejor performance.
  \end{itemize}
  Desventajas:
   \pause
  \begin{itemize}
    \pause \item Hay que implementar alguna forma de recordar las referencias salientes de las paginas en disco.
    \pause \item Puede ser necesario modificar el GC.
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Garbage Collector} 
  \framesubtitle{Imagen kernel}
  \begin{block}{Idea}
    Otra imagen sera la responsable de correr un GC escrito en Smalltalk sobre la imagen principal.
  \end{block}
  \pause
  Ventajas:
  \pause
  \begin{itemize}
    \pause \item Como el GC esta implementado en smalltalk no se pausa el entorno.
    \pause \item Se puede utilizar la implementación de paginación con objetos.
  \end{itemize}
  Desventajas:
   \pause
  \begin{itemize}
    \pause \item Necesitamos un GC en smalltalk que sea capaz que \"limpiar\" una imagen externa.
    \pause \item Tenemos que implementar algún mecanismo para cambiar el control entre las dos imágenes.
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Implementación}
  \framesubtitle{Decisiones}
  \begin{itemize}
  	\pause \item Implementamos una solución basada en una imagen kernel que realiza el GC.
  	\pause \item Dado a la falta de tiempo solo nos vamos a concentrar en implementar el sistema de paginación en la imagen kernel.
  	\pause \item Inicialmente vamos a ignorar cuestiones de performance.
  	\pause \item El objetivo principal es lograr un modelo que respete todas buenas practicas que vimos en la materia.
  \end{itemize}  
    
\end{frame}


\begin{frame}
	\frametitle{Implementación}
	\framesubtitle{Modelo de Clases}

  \begin{center}
    \includegraphics[width=150pt]{./img/VirtualMemoryManager.png}
  \end{center}
  
  \begin{center}
    \includegraphics[width=150pt]{./img/VirtualPageFaultHandler.png}
  \end{center}
\end{frame}

\begin{frame}
	\frametitle{Implementación}
	\framesubtitle{Modelo de Clases}
  
  \begin{center}
    \includegraphics[width=30pt]{./img/Page.png}
  \end{center}
    \begin{center}
    \includegraphics[width=200pt]{./img/PageFrame.png}
  \end{center}
  
\end{frame}

\begin{frame}
	\frametitle{Implementación}
	\framesubtitle{Modelo de Clases}
  \begin{center}
    \includegraphics[width=330pt]{./img/PageContainer.png}
  \end{center}
\end{frame}

\begin{frame}
	\frametitle{Implementación}
	\framesubtitle{Modelo de Clases}
  \begin{center}
    \includegraphics[width=330pt]{./img/PageFrameManager.png}
  \end{center}
\end{frame}

\begin{frame}
	\frametitle{Implementación}
	\framesubtitle{PageFault sin desalojo}
  \begin{center}
    \includegraphics[width=350pt]{./img/pageFault.png}
  \end{center}
\end{frame}

\begin{frame}
	\frametitle{Implementación}
	\framesubtitle{PageFault con desalojo}
  \begin{center}
    \includegraphics[width=270pt]{./img/pageFaultSinLugar.png}
  \end{center}
  
\end{frame}

\begin{frame}
  \frametitle{Trabajos a futuro}
  
  \begin{itemize}
    \pause \item Investigar más a fondo las soluciones de bootstrapping e ensayar algunas implementaciones.
    \pause \item Programar un entorno virtual para testear el Sistema.    
    \pause \item Ajustar el modelo para que soporte diferentes estrategias de desalojo.
    \pause \item Implementar las funcionalidades necesarias en la VM para poder pasar el control entre las virtual.
    \pause \item Analizar de que forma podríamos guardar la imagen en disco.
    
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{Conclusiones} 
  
  \begin{itemize}
    \pause \item Implementar los servicios que normalmente brinda un sistema operativo utilizando el paradigmas de objetos nos permite tener crear modelos muy escalables y configurables.
    \pause \item Programar el sistema desde el entorno smalltalk es mucho mas ameno que hacerlo desde C.
    \pause \item A pesar que un buen modelo es debería ser fácilmente comprendido, nunca esta de mas algo de documentación y comentarios.
    \pause \item Programación de Sistemas Operativos + Programación Orientada a Objetos...
  \end{itemize}
  \pause
  \begin{center}
    \includegraphics[width=150pt]{./img/porro.jpg}
  \end{center}
  
\end{frame}


\begin{frame}
  \frametitle{¿Preguntas?} 
  
  \begin{center}
    \includegraphics[width=250pt]{./img/preguntas.jpeg}
  \end{center}
  
\end{frame}

\begin{frame}
  
  \begin{center}
    \includegraphics[width=200pt]{./img/gracias.png}
  \end{center}
  
\end{frame}

\end{document}
